from re import U
import rich
import time
import plus.scan
import cmd2 as cmd
from rich.console import Console
from os import altsep, read, system, name

def clear():
    # for windows
    if name == 'nt':
        _ = system('cls')
        print('''
        ██╗   ██╗   ██╗██╗  ██╗██╗  ██╗     ███████╗██╗  ██╗██████╗ ██╗      █████╗ ███╗   ██╗ ██████╗ 
        ╚██╗ ██╔╝   ██║╚██╗██╔╝╚██╗██╔╝     ██╔════╝╚██╗██╔╝██╔══██╗██║     ██╔══██╗████╗  ██║██╔════╝ 
         ╚████╔╝    ██║ ╚███╔╝  ╚███╔╝█████╗█████╗   ╚███╔╝ ██████╔╝██║     ███████║██╔██╗ ██║██║  ███╗
          ╚██╔╝██   ██║ ██╔██╗  ██╔██╗╚════╝██╔══╝   ██╔██╗ ██╔═══╝ ██║     ██╔══██║██║╚██╗██║██║   ██║
           ██║ ╚█████╔╝██╔╝ ██╗██╔╝ ██╗     ███████╗██╔╝ ██╗██║     ███████╗██║  ██║██║ ╚████║╚██████╔╝
           ╚═╝  ╚════╝ ╚═╝  ╚═╝╚═╝  ╚═╝     ╚══════╝╚═╝  ╚═╝╚═╝     ╚══════╝╚═╝  ╚═╝╚═╝  ╚═══╝ ╚═════╝ 
                                                                                               
                                                                                        \033[1;31m---Info：ExpLang\033[0m
                                                                                        \033[1;35m---Team:云剑侠心\033[0m
                                    命令帮助：
                                        help *   将*替换为命令可查看命令帮助
                                        info     调用tig获取IP信息
                                        inst     安装脚本运行库文件
                                        clear    清屏命令
                                        finger   调用finger脚本对资产进行探测指纹信息
                                        jsscan   调用JSFinder脚本对资产JS文件收集敏感信息及子域名
                                        apkscan  提取APK文件内的url地址
                                        pocscan  当前支持致远、泛微综合漏洞扫描及批量扫描
                                        dirscan  调用dirsearch脚本对资产进行敏感文件及文件目录扫描
                                        portscan 对资产IP或域名进行常见端口列表扫描''')
    else:
        _ = system('clear')
        print('''
        ██╗   ██╗   ██╗██╗  ██╗██╗  ██╗     ███████╗██╗  ██╗██████╗ ██╗      █████╗ ███╗   ██╗ ██████╗ 
        ╚██╗ ██╔╝   ██║╚██╗██╔╝╚██╗██╔╝     ██╔════╝╚██╗██╔╝██╔══██╗██║     ██╔══██╗████╗  ██║██╔════╝ 
         ╚████╔╝    ██║ ╚███╔╝  ╚███╔╝█████╗█████╗   ╚███╔╝ ██████╔╝██║     ███████║██╔██╗ ██║██║  ███╗
          ╚██╔╝██   ██║ ██╔██╗  ██╔██╗╚════╝██╔══╝   ██╔██╗ ██╔═══╝ ██║     ██╔══██║██║╚██╗██║██║   ██║
           ██║ ╚█████╔╝██╔╝ ██╗██╔╝ ██╗     ███████╗██╔╝ ██╗██║     ███████╗██║  ██║██║ ╚████║╚██████╔╝
           ╚═╝  ╚════╝ ╚═╝  ╚═╝╚═╝  ╚═╝     ╚══════╝╚═╝  ╚═╝╚═╝     ╚══════╝╚═╝  ╚═╝╚═╝  ╚═══╝ ╚═════╝ 
                                                                                               
                                                                                        \033[1;31m---Info：ExpLang\033[0m
                                                                                        \033[1;35m---Team:云剑侠心\033[0m
                                    命令帮助：
                                        help *   将*替换为命令可查看命令帮助
                                        info     调用tig获取IP信息
                                        inst     安装脚本运行库文件
                                        clear    清屏命令
                                        finger   调用finger脚本对资产进行探测指纹信息
                                        jsscan   调用JSFinder脚本对资产JS文件收集敏感信息及子域名
                                        apkscan  提取APK文件内的url地址
                                        pocscan  当前支持致远、泛微综合漏洞扫描及批量扫描
                                        dirscan  调用dirsearch脚本对资产进行敏感文件及文件目录扫描
                                        portscan 对资产IP或域名进行常见端口列表扫描''')


class hacktools(cmd.Cmd):

    prompt = time.strftime('\033[1;31mScanTools\033[0m\033[1;35m\033[0m\033[0m\033[33m >> \033[0m\033[32m')
    
    def do_inst(self, line):
        plus.scan.install()
    
    def do_portscan(self, line):
        '''\033[1;31m
        快速对IP扫描常见端口\033[32m

        '''
        ip = input("\033[1;31m请输入扫描的IP：\033[32m")
        plus.scan.portscan(ip)
    def do_pocscan(self, line):
        '''\033[1;31m
        快速在网站的js文件中提取URL，子域名\033[32m
        \033[33m
        1.致远漏洞综合扫描
        2.致远漏洞综合批量扫描
        3.泛微漏洞综合扫描
        4.泛微漏洞综合批量扫描

        '''
        print('''\033[33m
        1.致远漏洞综合扫描
        2.致远漏洞综合批量扫描
        3.泛微漏洞综合扫描
        4.泛微漏洞综合批量扫描
        ''')
        xz = input("\033[1;31m请输入你的选项：\033[32m")
        if xz == '1':
            target_url = input("\033[1;31m请输入扫描Url：\033[32m")
            plus.scan.poc(xz, target_url)
        if xz == '2':
            target_url = input("\033[1;31m请输入扫描Url：\033[32m")
            plus.scan.poc(xz, target_url)
        if xz == '3':
            target_url = input("\033[1;31m请输入扫描文件地址：\033[32m")
            plus.scan.poc(xz, target_url)
        if xz == '4':
            target_url = input("\033[1;31m请输入扫描文件地址：\033[32m")
            plus.scan.poc(xz, target_url)

    def do_jsscan(self, line):
        '''\033[1;31m
        快速在网站的js文件中提取URL，子域名\033[32m
        \033[33m1.对单个网站进行扫描.
        2.对多个网站进行批量扫描.\033[32m

        '''
        print('''\033[33m
        1.对单个网站进行扫描.
        2.对多个网站进行批量扫描.\033[32m

        ''')
        xz = input("\033[1;31m请输入你的选项：\033[32m")
        if xz == '1':
            url = input("\033[1;31m请输入扫描Url：\033[32m")
            cookie = input("\033[1;31m请输入cookie(可为空)：\033[32m")
            plus.scan.jsscan(xz, url, cookie)
        elif xz == '2':
            file = input("\033[1;31m请输入待扫描文件地址：\033[32m")
            cookie = input("\033[1;31m请输入cookie(可为空)：\033[32m")
            plus.scan.jsscan(xz, file, cookie)
    
    def do_finger(self, line):
        '''\033[31m
        存活探测与重点攻击系统指纹探测\033[32m
        \033[33m1.对单个网站进行检测.
        2.对多个网站进行批量检测.
        3.对单个IP进行检测.
        4.对多个IP进行批量检测.\033[32m

        '''
        print('''\033[33m
        1.对单个网站进行检测.
        2.对多个网站进行批量检测.
        3.对单个IP进行检测.
        4.对多个IP进行批量检测.\033[32m

        ''')
        xz = input("\033[1;31m请输入你的选项：\033[32m")
        if xz == '1':
            url = input("\033[1;31m请输入扫描Url：\033[32m")
            plus.scan.finger(xz, url)
        elif xz == '2':
            file = input("\033[1;31m请输入待扫描文件地址：\033[32m")
            plus.scan.finger(xz, file)
        elif xz == '3':
            file = input("\033[1;31m请输入扫描IP：\033[32m")
            plus.scan.finger(xz, file)
        elif xz == '4':
            file = input("\033[1;31m请输入待扫描文件地址：\033[32m")
            plus.scan.finger(xz, file)

    def do_dirscan(self, line):
        '''\033[31m
        目录暴力破解的最佳工具\033[32m
        \033[33m1.对单个网站进行扫描.
        2.对多个网站进行批量扫描.\033[32m

        '''
        print('''\033[33m
        \033[33m1.对单个网站进行扫描.
        2.对多个网站进行批量扫描.\033[32m

        ''')
        xz = input("\033[1;31m请输入你的选项：\033[32m")
        if xz == '1':
            url = input("\033[1;31m请输入扫描Url：\033[32m")
            th = input("\033[1;31m请输入扫描线程(10-100)：\033[32m")
            report = input('\033[1;31m请输入保存文件名：\033[32m')
            plus.scan.dirsearch(xz, url, th, report)
        elif xz == '2':
            url = input("\033[1;31m请输入待扫描文件地址：\033[32m")
            th = input("\033[1;31m请输入扫描线程(10-100)：\033[32m")
            report = input('\033[1;31m请输入保存文件名：\033[32m')
            plus.scan.dirsearch(xz, url, th, report)

    def do_info(self, line):
        '''\033[31m
        IP威胁情报信息收集\033[32m
        \033[33m1.对单个IP进行扫描.
        2.对多个IP进行批量扫描.\033[32m

        '''
        print('''\033[33m
        \033[33m1.对单个IP进行扫描.
        2.对多个IP进行批量扫描.\033[32m

        ''')
        xz = input("\033[1;31m请输入你的选项：\033[32m")
        if xz == '1':
            ip = input('\033[1;31m请输入检测IP：\033[32m')
            report = input('请输入保存文件名：\033[32m')
            plus.scan.info_tig(xz, ip, report)
        elif xz == '2':
            ip = input('\033[1;31m请输入待扫描文件地址：\033[32m')
            report = input('\033[1;31m请输入保存文件名：\033[32m')
            plus.scan.info_tig(xz, ip, report)
        
    def do_apkscan(self, line):
        '''\033[31m
        提取APK内存在的Url地址\033[32m

        '''
        apkfile = input('\033[1;31m请输入待扫描APK地址：\033[32m')
        report = input('\033[1;31m请输入保存文件名：\033[32m')
        plus.scan.apkleaks(apkfile, report)

    def do_clear(self, line):
        '''清屏'''

        clear()

    def do_exit(self, line):
        '''退出工具'''

        return True


if __name__ == '__main__':
    clear()
    hacktools().cmdloop()